package com.briup.ch13;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * @Author briup-adam
 * @Date 2023/10/30 上午11:24
 * @Description 通过反射调用方法
 **/

public class MethodInvoke {
    public static void main(String[] args) {
        //调用四参数构造器 创建对象
        Class<Cat> catClass = Cat.class;
        try {
            Constructor<Cat> constructor = catClass.getDeclaredConstructor(String.class, int.class, String.class, String.class);
            constructor.setAccessible(true);
            Cat cat = constructor.newInstance("二营长", 20, "黑", "323");
            System.out.println(cat);

            //调用指定方法
            Method method = catClass.getDeclaredMethod("getName");
            method.setAccessible(true);
            Object o = method.invoke(cat);
            System.out.println(o);
            //调用show方法
            Method showMethod = catClass.getDeclaredMethod("show",String.class);
            showMethod.setAccessible(true);
            Object o1 = showMethod.invoke(cat, "这股话那个那天 要我的命");
            System.out.println(o1);

            //静态方法调用可以不通过对象
            showMethod.invoke(null,"芳草萋萋鹦鹉洲 白云千载空悠悠");
        } catch (Exception e) {
            e.printStackTrace();

        }
    }
}
